public class Test13 {
    public int deleteAndEarn(int[] nums) {
        // 题解
        int n = 10001;
        int[] arr = new int[n];
        for(int i : nums) {
            arr[i] += i;
        }
        int[] T = new int[n];
        int[] F = new int[n];
        T[0] = arr[0];
        for(int i = 1;i < n;i++) {
            T[i] = F[i - 1] + arr[i];
            F[i] = Math.max(F[i - 1],T[i - 1]);
        }
        return Math.max(T[n - 1],F[n - 1]);

        // 也能通过
        // int n = nums.length;
        // if (n == 0) return 0;
        // int[] T = new int[n];
        // int[] F = new int[n];
        // Arrays.sort(nums);
        // T[0] = nums[0];
        // for(int i = 1;i < n;i++) {
        //     if (nums[i - 1] == nums[i] - 1 || nums[i - 1] == nums[i] + 1) {
        //         T[i] = F[i - 1] + nums[i];
        //     } else if(nums[i] == nums[i - 1]) {
        //         T[i] = T[i - 1] + nums[i];
        //     } else {
        //         T[i] = Math.max(F[i - 1],T[i - 1]) +nums[i];
        //     }
        //     if(nums[i - 1] == nums[i]) {
        //         F[i] = F[i - 1];
        //     } else {
        //         F[i] = Math.max(F[i - 1],T[i - 1]);
        //     }
        // }
        // return Math.max(T[n - 1],F[n - 1]);
    }
}
